package org.example.ndarray.create;

import ai.djl.ndarray.NDArray;
import ai.djl.ndarray.NDManager;

public class Example1 {
    public static void main(String[] args) {
        /*
          NDManager执行界面AutoClosable并管理由它创建的NDArray的声明周期
          因为Java GC无法监管本地内存消耗，我们需要NDManager的帮助
          通常我们会把NDManager封装在try blocks中，这样所有的NDArray可以被及时关掉
         */
        try (NDManager ndManager = NDManager.newBaseManager()) {
            // 创建一个行向量
            NDArray ndArray = ndManager.arange(12);
            System.out.println(ndArray);
            // 改变 NDArray 的维度并且不改变每个元素的数值
            ndArray = ndArray.reshape(3, 4);
            System.out.println(ndArray);
            /*
              我们通过使用-1代替我们想要NDArray自动计算的维度
              下面两种NDArray的值是一致的
             */
            ndArray = ndArray.reshape(-1, 4);
            System.out.println(ndArray);
            ndArray = ndArray.reshape(3, -1);
            System.out.println(ndArray);
        }
        // 超出 try 的范围后，会自动调用 ndManager 的 close() 方法，从而释放所有由它创建的NDArray
    }
}